class A():
    a = 0
    def af(self):
        print("I am af")
    
class B(A):
    b = 0
    def af(self):
        print("I am bf")
class C(A):
    c = 0
    def af(self):
        print("I am cf")
class D(B,C):
    d = 0
    def af(self):
        print("I dm df")
def showClassInfo(cls):
    print(f"---{cls.__name__}---")
    print(f"class:{cls.__class__}")
    print(f"base:{cls.__base__}")
    print(f"bases:{cls.__bases__}")
    print(f"dict:{cls.__dict__}")
    print(f"dir: {cls.__dir__(cls)}")  # dir(cls)
    print(f"mro: {cls.__mro__}")  

    
if __name__ == "__main__":
   showClassInfo(A)
   showClassInfo(B)
   showClassInfo(C)
   showClassInfo(D)

   d = D()
   print(dir(d.af))

  